Microcontrollers can be configured to communicate with a variety of peripherals using a direct memory access (DMA) controller. DMA can allow the microcontroller to access memory on a peripheral independently of a processor of a microcontroller. This can be useful, e.g., so that the processor can initiate a data transfer, perform other operations while the data transfer is in progress, and then return to the transfer when the transfer is complete. Allowing the processor to perform other operations can improve system performance, e.g., when the processor is not keeping up with the rate of data transfer, or where it is useful for the processor perform other work while waiting for a data transfer to finish.